const errorTypes = require('../constants/error-types')
const UserService = require('../service/login.service')
const md5password = require('../utils/password-crypto')

// 验证新用户是否存在
const verifyUser = async (ctx, next) => {
  // 1. 获取用户名和密码
  const { account, password } = ctx.request.body
  // 2. 判断用户名或者密码不能为空
  if (!account || !password) {
    const error = new Error(errorTypes.NAME_OR_PASSWORD_IS_REQUIRED)
    return ctx.app.emit('error', error, ctx)
  }
  // 3. 判断用户名是否重复
  const result = await UserService.getUserByAccount(account)
  if (result.length) {
    const error = new Error(errorTypes.USER_ALREADY_EXISTS)
    return ctx.app.emit('error', error, ctx)
  }
  await next()
}

// 密码加密
const handlePassword = async (ctx, next) => {
  const { password } = ctx.request.body
  ctx.request.body.password = md5password(password)
  await next()
}

module.exports = {
  verifyUser,
  handlePassword,
}
